#include "stdafx.h"
#include "detail/bmock_arg_val.hpp"

namespace bmock {

#ifndef _MSC_VER
	const size_t arg_val::DEFAULT_PRINT_LENGTH;
#endif

	arg_val::~arg_val() {
	}

	bool arg_val::validate(const arg_checker &chk,const arg_val_str &vs) const {
		return validate(chk,vs.first);
	}

	bool arg_val::validate_no_msg(const arg_checker &chk,const arg_val_str &vs) const {
		return validate_no_msg(chk,vs.first);
	}

	bool arg_val::update(const arg_checker &chk,const arg_val_str &vs) const {
		return update(chk,vs.second);
	}

	arg_val_str arg_val::get_value(const arg_checker &chk) const {
		return arg_val_str(get_in_value(chk),get_out_value(chk));
	}

	std::string arg_val::get_in_value(const arg_checker &) const {
		return get_in_value();
	}

	std::string arg_val::get_in_value() const {
		return "";
	}

	std::string arg_val::get_out_value(const arg_checker &) const {
		return "";
	}

	bool arg_val::validate(const arg_checker &,const std::string &) const {
		return false;
	}

	bool arg_val::validate_no_msg(const arg_checker &, const std::string &) const {
		return false;
	}

	bool arg_val::update(const arg_checker &,const std::string & ) const {
		return false;
	}

	void arg_val::update(const std::string &,const control_tools_ptr&,int) const {
	}

	arg_val::arg_val(const char *const n)
		:name_(n)
	{}

	bool arg_val::ignore(const std::string &v) const {
		return (IGNORE_STR==v);
	}

	void arg_val::print_value(std::ostream &) const {
	}
}

namespace std {
	std::ostream & operator << (std::ostream &os,const bmock::arg_val_str &vs) {
		os << '{' << vs.first << ',' << vs.second << '}';
		return os;
	}
}
